home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
serien
/
purity
/
nr.45
/
amigaprotect
/
amigaprotect.p
< prev
next >
Wrap
Text File
|
1995-03-02
|
7KB
|
281 lines
PROGRAM AmigaProtect;
{ Simples, aber doch effektives Programm zum Schützen seines
eigenen Rechners vor ungewollten Zugriffen.
Dieses Programm ist GIFTWARE !!
©1995 by Björn Schotte (BOMBERSOFT) }
USES Intuition, Graphics, Exec;
{$incl "dos.lib"}
CONST
{ DEBUGGING = 1;}
logfile = "ENVARC:AmigaProtect/logfile";
passwd = "ENVARC:AmigaProtect/passwds";
TYPE
userrec = RECORD
username,
passwd : STRING;
END;
VAR
ps : p_Screen; STATIC;
wp : p_Window; STATIC;
modes,x,y,b,h,anz,i : LONG; STATIC;
rp : p_RastPort; STATIC;
t : ARRAY[1..8] OF TagItem; STATIC;
ok : BOOLEAN; STATIC;
pattern: ARRAY[0..1] OF WORD; STATIC;
f : TEXT; STATIC;
machinename,s,s1,usern,passw,
datum,zeit : STRING; STATIC;
user : ARRAY[1..20] OF userrec; STATIC;
msg : p_IntuiMessage; STATIC;
class,code : LONG; STATIC;
versuch : BYTE; STATIC;
std,min,sek : BYTE; STATIC;
PROCEDURE Upper(VAR s : STRING);
BEGIN
FOR i := 1 TO Length(s) DO s[i] := UpCase(s[i]);
END;
PROCEDURE OpenLogFile;
BEGIN
Reset(f,logfile);
IF IOResult <> 0 THEN ReWrite(f, logfile) ELSE Seek(f,filesize(f));
IF IOResult <> 0 THEN Error("Kann die LogDatei nicht anlegen!!");
END;
PROCEDURE uhrzeit(VAR stunden,minuten,sekunden:Byte);
VAR zeit : DATESTAMP;
xx : p_DateStamp;
BEGIN
xx := _DATESTAMP(^zeit);
stunden := zeit.ds_minute DIV 60;
minuten := zeit.ds_minute MOD 60;
sekunden:= zeit.ds_tick DIV 50;
END;
FUNCTION OS2_Datum : STRING;
VAR
s,s1 : STRING;
x : LONGINT;
dummydate : ^DATESTAMP;
datedatum : DATESTAMP;
DT : DateTime;
BEGIN
DummyDate := DOSDateStamp(^DateDatum);
DT := DateTime(DateDatum,FORMAT_DOS,0,NIL,^s,NIL);
x := DateToStr(^DT);
s1 := DT.dat_StrDate;
OS2_Datum := s1;
END;
PROCEDURE GetDates;
VAR st,mi,se : STRING;
BEGIN
uhrzeit(std,min,sek);
st := IntStr(std); mi:=IntStr(min); se := IntStr(sek);
IF std < 10 THEN st := "0"+st;
IF min < 10 THEN mi := "0"+mi;
IF sek < 10 THEN se := "0"+se;
zeit := st+":"+mi+":"+se;
datum := OS2_Datum;
END;
PROCEDURE ReadInPassWds;
BEGIN
s := "Kann "+passwd+" nicht öffnen!";
Reset(f, passwd);
IF IOResult <> 0 THEN
Error(s);
Buffer(f, 10000);
ReadLn(f, machinename);
anz := 0;
WHILE NOT EOF(f) DO
BEGIN
Inc(anz);
ReadLn(f, user[anz].username);
Upper(user[anz].username);
Readln(f, user[anz].passwd);
Upper(user[anz].passwd);
END;
Close(f);
{$if def DEBUGGING}
Writeln("Maschinenname: ",machinename);
Writeln(anz:3," User");
{$endif}
END;
PROCEDURE clone;
BEGIN
ps := LockPubScreen(NIL);
IF ps = NIL THEN Error("Kann den Workbenchscreen nicht locken!");
END;
PROCEDURE SetAfPt(w:p_RastPort;p:Ptr;n:Integer);
BEGIN
w^.AreaPtrn:=p;
w^.AreaPtSz:=n;
END;
PROCEDURE Hintergrund;
BEGIN
x := wp^.BorderLeft+1;
y := wp^.BorderTop+1;
b := wp^.Width-wp^.BorderRight-1;
h := wp^.Height-wp^.BorderBottom-1;
pattern[0]:=$AAAA; { Pattern ausfüllen }
pattern[1]:=$5555;
SetAfPt(RP,^pattern,1); { Pattern setzen }
SetAPen(RP,1); { Farben für Raster }
SetBPen(RP,0);
SetDrMd(RP,JAM2); { Schreibmodus setzen }
RectFill(RP,x,y,b,h);
SetAfPt(RP,NIL,0); { Pattern zurücksetzen }
END;
PROCEDURE SchreibeStuff;
VAR
it,it1,it2 : IntuiText;
tattr : TextAttr;
s2 : STRING;
BEGIN
tattr := TextAttr("topaz.font",8,FSF_BOLD,0);
it := IntuiText(3,0,JAM2,0,0,^tattr,machinename,NIL);
PrintIText(rp,^it,(wp^.Width-IntuiTextLength(^it)) DIV 2,wp^.BorderTop+5);
tattr.ta_Flags := 0;
s2 :=" Versuch: "+IntStr(versuch);
it2 := IntuiText(2,0,JAM2,0,20,^tattr,s2,NIL);
s := "Passwort:";
FOR i := 1 TO 30 DO s := s + " ";
it1 := IntuiText(2,0,JAM2,0,10,^tattr,s,^it2);
s1 := "Username:";
FOR i := 1 TO 30 DO s1 := s1 + " ";
it := IntuiText(2,0,JAM2,0,0,^tattr ,s1,^it1);
PrintIText(rp,^it,wp^.BorderLeft+3,wp^.BorderTop+50);
END;
PROCEDURE Abfrage(VAR st:STRING; x,y,maxl:INTEGER; hide:BOOLEAN);
VAR
it : IntuiText;
tattr : TextAttr;
c : CHAR;
ss : STRING;
BEGIN
tattr := TextAttr("topaz.font",8,0,0);
st := "";
ok := FALSE;
REPEAT
msg := p_IntuiMessage(WaitPort(wp^.UserPort));
msg := p_IntuiMessage(GetMsg(wp^.UserPort));
WHILE msg <> NIL DO
BEGIN
class := msg^.Class;
code := msg^.Code;
ReplyMsg(p_Message(msg));
CASE class OF
IDCMP_INACTIVEWINDOW : i := ActivateWindow(wp);
IDCMP_VANILLAKEY:
BEGIN
IF code = 13 THEN ok := TRUE
ELSE
BEGIN
c := CHR(code);
IF (Length(st) = maxl) AND NOT (c = CHR(8)) THEN DisplayBeep(NIL)
ELSE
BEGIN
IF c = CHR(8) THEN
BEGIN
IF st <> "" THEN
BEGIN
Delete(st,Length(st),1);
x := x - 8;
it := IntuiText(3,0,JAM2,0,0,^tattr," ",NIL);
PrintIText(rp,^it,x,y);
END;
END ELSE
BEGIN
st := st + c;
IF hide THEN c := "*"
ss := c;
it := IntuiText(3,0,JAM2,0,0,^tattr,ss,NIL);
PrintIText(rp,^it,x,y);
x := x + 8;
END;
END;
END;
END;
ELSE END;
msg := p_IntuiMessage(GetMsg(wp^.UserPort));
END;
UNTIL ok;
END;
PROCEDURE win;
LABEL again;
BEGIN
clone;
t[1] := TagItem(WA_Flags, WFLG_SMART_REFRESH+
WFLG_NOCAREREFRESH+
WFLG_ACTIVATE);
t[2] := TagItem(WA_IDCMP, IDCMP_VANILLAKEY+
IDCMP_INACTIVEWINDOW);
t[3] := TagItem(WA_Left,(ps^.Width - 400) DIV 2);
t[4] := TagItem(WA_Top, (ps^.Height - 150) DIV 2);
t[5] := TagItem(WA_Width, 400);
t[6] := TagItem(WA_Height, 150);
t[7].ti_Tag := WA_Title;
t[7].ti_Data := "AmigaProtect V0.1";
t[8].ti_Tag := TAG_DONE;
wp := OpenWindowTagList(NIL,^t);
IF wp = NIL THEN
Error("Kann kein Fenster öffnen!!");
rp := wp^.RPort;
Hintergrund;
again:
Inc(versuch);
IF versuch > 3 THEN
BEGIN
Write(f, datum+", "+zeit+": ");
Writeln(f,"Login von <"+usern+"> mit Passwort <"+passw+"> mißglückt!");
Close(f);
Delay(200);
forbid;
WHILE TRUE DO;
END;
SchreibeStuff;
Abfrage(usern,80,wp^.BorderTop+50,30,FALSE);
Abfrage(passw,80,wp^.BorderTop+60,30,TRUE);
Upper(usern);
Upper(passw);
GetDates;
FOR i := 1 TO anz DO
BEGIN
IF (usern = user[i].username) AND (passw = user[i].passwd) THEN
BEGIN
Write(f, datum+", "+zeit+": ");
Writeln(f, "Login von <"+usern+"> mit Passwort <"+passw+"> ok!");
EXIT;
END;
END;
GOTO again;
END;
BEGIN
OpenLib(DOSBase, "dos.library", 37);
versuch := 0;
ReadInPasswds;
OpenLogFile;
win;
Close(f);
CloseWindow(wp);
UnLockPubScreen(NIL, ps);
END.